home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: MegaDisc / MegaDisc 42 (1994-11)(MegaDisc Digital Publishing)(AU)(Disk 1 of 2)[WB].zip / MegaDisc 42 (1994-11)(MegaDisc Digital Publishing)(AU)(Disk 1 of 2)[WB].adf / Programming / PASCAL_TUTES / Tute6.pas / Tute6.pas
Pascal/Delphi Source File  |  1994-12-12  |  8KB  |  237 lines

  1. {
  2.  
  3.              «»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»
  4.              «»                                                  «» 
  5.              «»                   TUTORIAL SIX                   «» 
  6.              «»                                                  «» 
  7.              «»                        by                        «» 
  8.              «»                                                  «» 
  9.              «»                   Anthony Peck                   «» 
  10.              «»                                                  «» 
  11.              «»                                                  «» 
  12.              «»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«» 
  13.                                                                     
  14.  
  15.  
  16.        :)  6x9=42  :)  6x9=42  :)  6x9=42  :)  6x9=42  :)  6x9=42  :)
  17.  
  18.  
  19.                         It's the beginning of the end...
  20.  
  21.  
  22.     The "if" statement that we saw showcased in tute3.pas was
  23.     marvellous, but it was a bit limited.  What if we wanted to execute
  24.     more than one command for each switch?  Can it be done?  You bet
  25.     your left index finger it can!
  26.  
  27.     When we want a series of commands to be executed, we need to set up
  28.     a little "sub-routine" that just contains those commands.  We mark
  29.     this sub-routine with new "begin..end" commands.  The code
  30.     that lives between the "begin..end" commands is called a
  31.     programming block.  It's like an ice block only warmer...
  32.  
  33.     Enough theory, let's have a bash at a program.  This program will
  34.     take a number supplied by the user, and calculate the square root.
  35.     The square root is a number that, when multiplied by itself, gives
  36.     you your original number.  For example, 3 is the square root of 9
  37.     (3x3=9).  Pascal provides an inbuilt function called sqrt for this
  38.     purpose, so we'll use it! }
  39.  
  40.     Program MDTute6 (input,output);
  41.  
  42.     {    This program will calculate the square root
  43.  
  44.         of a number supplied by the user
  45.  
  46.                 Author : A N Peck
  47.  
  48.                 Date : 25 August 1994 }
  49.  
  50.     const
  51.  
  52.     tab = '     ';
  53.  
  54.     var
  55.  
  56.     num: single;
  57.     
  58. {            ^
  59.              |
  60.              |__  See tute5.pas for the answer to this and many other
  61.                   unspeakable questions...  }
  62.  
  63.     begin
  64.  
  65.     writeln;
  66.  
  67.     write(tab,'Please enter in a positive num: ');
  68.  
  69.     readln(num);
  70.     
  71.     writeln;
  72.  
  73.     if num >= 0 then
  74.  
  75. {        ^
  76.         |
  77.         |__ This sign means "greater than or equal to", and so the
  78.             "if" statement is checking to see that the user has
  79.             supplied a positive number.
  80.  
  81.             There is another way of writing this...
  82.  
  83.                 if not num < 0 then
  84.  
  85.             It looks horrible but it does work!  Translated it
  86.             says, "If the number is not less than zero".  In
  87.             other words, if the number is positive.  }
  88.  
  89.          begin
  90.  
  91. {        ^
  92.         |
  93.         |__  Here is our second "begin" statement.  This 
  94.              one doesn't indicate the start of another 
  95.              program but rather the start of our first 
  96.              "subroutine", or programming block.
  97.  
  98.              "If" the number supplied (num) is positive "then"
  99.              ALL of the commands which follow this "begin"
  100.              command will be executed.  The compiler will stop
  101.              when it sees the "end".
  102.  
  103.              Notice that I've indented this "begin" so that
  104.              the code is a bit easier to read.  If you indent
  105.              in this way, it can be helpful when you're
  106.              troubleshooting (debugging).  }
  107.  
  108.           writeln(tab,'The square root is',sqrt(num):0:4);
  109.  
  110. {                         ^
  111.                          |
  112.                          |__  This is an inbuilt
  113.                               function which finds
  114.                               the square root
  115.                               of a number 
  116.  
  117.             This begin..end block has only one command,
  118.             and so we don't strictly need it, but I've left
  119.             it in there to illustrate the point.  See the
  120.             notes at the end of the code for a more expanded
  121.             explanation! }
  122.  
  123.           end
  124.  
  125. {           ^
  126.            |
  127.            |__  Note no semi-colon at the end of this "end"!
  128.             That's because the line isn't finished yet... }
  129.  
  130.     else
  131.  
  132.           begin
  133.  
  134. {        ^
  135.         |
  136.         |__  If the number supplied (num) is negative then this
  137.              next series of commands are executed! }
  138.  
  139.           writeln(tab,'That''s a negative number!');
  140.  
  141.           writeln;
  142.  
  143.           writeln(tab,'I can''t give you the square root of ',
  144.           
  145.                   num:0:2);
  146.  
  147. {                ^
  148.                 |
  149.                 |__  I've just split this line up
  150.                      to make it look pretty (ahem)... }
  151.  
  152.       end;
  153.  
  154. {         ^
  155.          |
  156.          |__  The end of the begin..end block which in this case
  157.           contained three "sub"-commands.  Is a sub-command like
  158.           DIVE, or UP PERISCOPE, or BLOW THE TANKS!!!  }
  159.       
  160.     writeln;  
  161.  
  162.     end.
  163.  
  164. {    So what happened?  See diagram_three for a flowchart.  It often
  165.     helps to "see" the logic rather than using your imagination.  A
  166.     picture is worth a thousand words and all that!
  167.  
  168.     These begin..end blocks can be used as many times as you wish
  169.     in the program, and the tricky thing for a long program is matching
  170.     all beginnings with all the ends.
  171.  
  172.     An example might be...
  173.  
  174.     begin
  175.       begin
  176.         begin
  177.           begin
  178.           writeln('Hi there nested statement!');
  179.           end;
  180.         end;
  181.       end;
  182.     end.
  183.  
  184.     It's kinky, but it works as long as for each "begin" there's a
  185.     matching "end".
  186.  
  187.     It's possible to use "begin..end" blocks with the "case"
  188.     command.  In fact, you can use it anywhere, as long as you
  189.     have the right government permit (S/NL 34-a22).
  190.  
  191.     In tute4.pas we looked at switching an age variable (called
  192.     "yourage") using a "case" command.  If you're really bored you
  193.     could go back and have a crack at rewriting that code to include
  194.     more than one comment for each age bracket.  I'll give you the
  195.     basic format...
  196.  
  197.     case variable of
  198.  
  199.     1st range: begin
  200.                    .
  201.            .
  202.            commands
  203.                    .
  204.            .
  205.            end;
  206.  
  207.     2nd range: begin
  208.                    .
  209.            .
  210.            commands
  211.                    .
  212.            .
  213.            end;
  214.  
  215.     etc...
  216.  
  217.     end;
  218.  
  219.  
  220.     Try it before you go to bed tonight, and don't forget to brush
  221.     your teeth (good dental hygiene is essential in these uncertain
  222.     times).
  223.  
  224.  
  225.              «»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»
  226.              «»                                                  «» 
  227.              «»                       Finis!                     «» 
  228.              «»                                                  «» 
  229.              «»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«»«» 
  230.  
  231.        :)  6x9=42  :)  6x9=42  :)  6x9=42  :)  6x9=42  :)  6x9=42  :)
  232.  
  233.  
  234.                                                                      }
  235.  
  236.  
  237.